<?php

namespace common\set;

interface SetInterface
{

    /**
     * 向存储中添加一个或多个元素
     *
     * @param $members (string|array) 需要添加的元素
     * @param $storage string 集合名
     * @return integer 被添加到集合中的新元素的数量
     */
    public function add($members, $storage);

    /**
     * 移除并返回存储中的一个随机元素
     *
     * @param $storage string 集合名
     * @return string 移除的元素
     */
    public function pop($storage);

    /**
     * 返回集合中所有的元素
     *
     * @param $set string 集合名
     * @return array 所有元素的列表
     */
    public function all($set);

    /**
     * 移除集合中的一个或多个元素
     *
     * @param $members (string|array) 要移除的元素
     * @param $set string 集合名
     * @return integer 被成功移除的元素的数量
     */
    public function remove($members, $set);

    /**
     * 判断元素是否在指定的集合中
     *
     * @param $member string 元素名
     * @param $set string 集合名
     * @return boolean 存在返回true，否则false
     */
    public function exists($member, $set);

    /**
     * 返回集合中元素的数量
     *
     * @param $set string 集合名
     * @return integer 元素数量
     */
    public function count($set);

    /**
     * 返回所有给定集合的交集
     *
     * @param array $sets 集合数组
     * @return array 交集成员的列表
     */
    public function inter(array $sets);

    /**
     * 返回所有给定集合的并集
     *
     * @param array $sets 集合数组
     * @return array 并集成员的列表
     */
    public function union(array $sets);

    /**
     * 返回所有给定集合的差集
     *
     * @param array $sets 集合数组
     * @return array 交集成员的列表
     */
    public function diff(array $sets);
}